//
//  UITableView+Extend.h
//  IosTemplate
//
//  Created by GuoliWang on 2018/8/24.
//  Copyright © 2018年 GuoliWang. All rights reserved.
//

/**
 说明：
 1.UITableView自适应的初始化封装
 2.
 3.UITableView beginUpdates和endUpdates之间的操作回调
 4.UITableView 一些滚动刷新插入删除封装
 
 **/
#import <UIKit/UIKit.h>

@interface UITableView (Extend)
#pragma mark ----------------    UITableView自适应的初始化封装      ------------------
/**
 初始化自适应cell的tableview
 
 @param frame frame
 @param style Plain or Grouped
 @param delegateAndDataSource 代理和数据源
 @return tableview
 */
+ (UITableView *)estimatedLayoutTableview:(CGRect)frame tableviewStyle:(UITableViewStyle )style delegateAndDataSource:(id)delegateAndDataSource;

/**
 初始化自适应cell，自适应sectionHeader,自适应sectionFooter的tableview

 @param frame frame
 @param style Plain or Grouped
 @param delegateAndDataSource 代理和数据源
 @param estimatedSectionHeader 头部是否自适应
 @param estimatedSectionFooter 底部是否自适应
 @return tableview
 */
+ (UITableView *)estimatedLayoutTableview:(CGRect)frame tableviewStyle:(UITableViewStyle )style delegateAndDataSource:(id)delegateAndDataSource estimatedSectionHeader:(BOOL)estimatedSectionHeader estimatedSectionFooter:(BOOL)estimatedSectionFooter;


#pragma mark ----------------    UITableView刷新完成      ------------------
//UITableView刷新完成
- (void)reloadDataCompletion:(void (^)(void))completion;
#pragma mark ----------------    UITableView beginUpdates和endUpdates之间的操作回调     ------------------
/**
 beginUpdates 和 endUpdates必须成对使用
 
 使用beginUpdates和endUpdates可以在改变一些行（row）的高度时自带动画，并且不需要Reload row（不用调用cellForRow，仅仅需要调用heightForRow，这样效率最高）。
 
 在beginUpdates和endUpdates中执行insert,delete,select,reload row时，动画效果更加同步和顺滑，否则动画卡顿且table的属性（如row count）可能会失效。
 
 在beginUpdates 和 endUpdates中执行 reloadData 方法和直接reloadData一样，没有相应的中间动画

 @param block <#block description#>
 */
- (void)updateWithBlock:(void (^)(UITableView *tableView))block;


#pragma mark ----------------    UITableView 一些滚动刷新插入删除封装      ------------------
//滚到第section区row行
- (void)scrollToRow:(NSUInteger)row inSection:(NSUInteger)section atScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated;

//插入到第section区row行
- (void)insertRow:(NSUInteger)row inSection:(NSUInteger)section withRowAnimation:(UITableViewRowAnimation)animation;

//刷新第section区row行
- (void)reloadRow:(NSUInteger)row inSection:(NSUInteger)section withRowAnimation:(UITableViewRowAnimation)animation;

//删除第section区row行
- (void)deleteRow:(NSUInteger)row inSection:(NSUInteger)section withRowAnimation:(UITableViewRowAnimation)animation;

//插入到第indexPath
- (void)insertRowAtIndexPath:(NSIndexPath *)indexPath withRowAnimation:(UITableViewRowAnimation)animation;

//刷新第indexPath
- (void)reloadRowAtIndexPath:(NSIndexPath *)indexPath withRowAnimation:(UITableViewRowAnimation)animation;

//删除第indexPath
- (void)deleteRowAtIndexPath:(NSIndexPath *)indexPath withRowAnimation:(UITableViewRowAnimation)animation;


- (void)insertSection:(NSUInteger)section withRowAnimation:(UITableViewRowAnimation)animation;


- (void)deleteSection:(NSUInteger)section withRowAnimation:(UITableViewRowAnimation)animation;


- (void)reloadSection:(NSUInteger)section withRowAnimation:(UITableViewRowAnimation)animation;


- (void)clearSelectedRowsAnimated:(BOOL)animated;

@end
